<?php

/* 
 * Manager/TauxManager.php
 */
namespace RHX\Model\Manager;

use Zend\Db\Adapter\Adapter;
use RHX\Model\Object\PlanningSemaine;
use RHX\Model\Table\PlanningSemaineTable;
use RHX\Model\Object\EmployeTemplate;
use RHX\Model\Table\EmployeTemplateTable;
use RHX\Model\Object\Employe;
use RHX\Model\Table\EmployeTable;

use RHX\Model\Table\SemaineTable;
use RHX\Model\Object\Site;
use RHX\Model\Table\SiteTable;

use RHX\Model\Object\Avenant;
use RHX\Helper\RHDateTime;

class TauxManager{
    private $adapter = null;
    
    /**
     * Constructeur
     * 
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter){
	$this->adapter = $adapter;
    }
    
    /**
     * Adapteur de base de données
     * 
     * @return Adapter
     */
    public function getAdapter(){
	return $this->adapter;
    }
    
    /*
     * MAJ et creation d'avenant des employé
     * 
     * @param float $taux horaire à appliquer
     * @param float $nouveau_taux nouvelle valeur du taux
     * @param $dateApplication date ou le nouveau taux horaire serait appliqué
     *
     */
    
    public function updateEmployesHavingTaux($taux, $nouveau_taux, $date_application){
	$employeTbl	    = new \RHX\Model\Table\EmployeTable ($this->getAdapter());	
	$avenantTbl	    = new \RHX\Model\Table\AvenantTable ($this->getAdapter());	
	$avenantHistoryTbl  = new \RHX\Model\Table\AvenantHistoryTable ($this->getAdapter());
	
	$employes = $employeTbl->getEmployesByTaux($taux);
	
	$dateApply = new RHDateTime($date_application);
	
	if(count($employes)){
	    foreach ($employes as $e):
	    //update old avenant	    
		$avOld = $e->getAvenant(null);	 

		$arrayCopyAvOld = $avOld->getArrayCopy();
		$arrayCopyAvOld['id'] = 0;

		var_dump($avOld->id);

		$dateAvOldFin = new RHDateTime($date_application);
		$dateAvOldFin->modify('previous day');

		$avOld->fin = $dateAvOldFin->date();
		$avenantTbl->save($avOld);

	    //create new avenant
		// change taux, datedebut

		var_dump($arrayCopyAvOld);
		$avNew = new Avenant($avenantTbl->getAdapter(), $arrayCopyAvOld);
		$avNew->taux = $nouveau_taux;
		$avNew->debut = $dateApply->date();	
                $avNew->libelle = 'Variation de taux horaire';
		//$avNew->fin = "0000-00-00";

		$avNewId = $avenantTbl->save($avNew);
		$avNew->id =  $avNewId;

		var_dump($avNew);

	    // save history
		$history = new \RHX\Model\Object\AvenantHistory($avenantHistoryTbl->getAdapter());
		$history->avenant_id = $avNewId;
		$history->matricule = $e->matricule;
		$history->num = 1;
		$history->commentaire = date('Y-m-d') . '-' . ' changement du taux horaire #' . $e->matricule;
		$avenantHistoryTbl->save($history);

	    // Mise à Jour de l'employé	    
		$e->avenant_id = $avNewId;
		$employeTbl->save($e);
	    endforeach;
	    
	    $ret = true;
	}
	else{
	    $ret = false;
	}
	
	print_r("nombre d'employé à mettre à jour : " . count($employes));	
	
	return $ret;
    }
    
    /* recupérer les taux existant en les regroupant par poste
     * 
     * @return array tableau (dont l'indice sont les poste) contenant  des tableau de taux
     * 
     */
    public function getTauxPerPoste(){
	    $tauxProcessTbl = new  \RHX\Model\Table\tauxProcessTable($this->getAdapter());
	
	    $taux_postes = $tauxProcessTbl->getListTauxPosteExists();
	
	    $tabTaux = array();
	    foreach ($taux_postes as $t_p):
		$code = $t_p['code'];
		$taux = $t_p['taux'];
                
                $processTaux = $this->getByCodeAndTaux($code, (float)$taux );
                
		$tabTaux[$code] [] = array(
                        'val' => (float)$taux ,                        
                        'taux_process' => $processTaux ? $processTaux : false
                        );
                
	    endforeach;
	    
	    return $tabTaux;
	}
	
  public function getPosteLibelle($code){
      $posteTbl = new  \RHX\Model\Table\PosteTable($this->getAdapter());
      return $posteTbl->getLibelle($code);
  }
  
  /*
   * tester si un couple (code, taux) est parmi les enreg en base
   * @param string $code : code d'un poste 
   * @param  float      $taux : le taux à verifier
   * @return boolean
   **/
  
  public function isAmongSaved($code, $taux){
      $tauxProcessTbl = new  \RHX\Model\Table\tauxProcessTable($this->getAdapter());      
      
      return $tauxProcessTbl->isExistsByCodeAndTaux($code, $taux);
  }
  public function getByCodeAndTaux($code, $taux){
      $tauxProcessTbl = new  \RHX\Model\Table\tauxProcessTable($this->getAdapter());      
      
      return $tauxProcessTbl->getByCodeAndTaux($code, $taux, $isApplied = false);
  }
}
